import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { reqLogin, reqUserInfo } from '../../api/user'
import { asyncSetStorage } from '../../utils/storage'
import { userStore } from '../../store/userStore'
// 导入防抖函数
import { debounce } from '@/utils/debounce'
ComponentWithStore({
  storeBindings: {
    store: userStore,
    fields: ['token', 'userInfo'],
    actions: ['setToken', 'setUserInfo']
  },
  methods: {
    // 授权登录
    login: debounce(function () {
      wx.login({
        // 使用wx.login获取微信用户的临时凭证
        success: async ({ code }) => {
          // 获取成功 发送后端
          if (code) {
            const {
              data: { token }
            } = await reqLogin(code)
            asyncSetStorage('token', token)
            this.setToken(token)
            // 登录之后获取用户信息
            this.getUserInfo()
            // 返回我的页面
            wx.navigateBack()
          } else {
            wx.toast({
              title: '授权失败,请重新授权'
            })
          }
        }
      })
    }, 500),
    // 获取用户信息
    async getUserInfo() {
      const { data } = await reqUserInfo()
      // 将用户信息存储到本地
      asyncSetStorage('userInfo', data) // 将用户信息存储到 Store
      this.setUserInfo(data)
    }
  }
})
